﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Kaesoft.Hospedaje.Entities;
using Kaesoft.Hospedaje.Proxy;
using Kaesoft.Hospedaje.Proxy.DatosReglasReference;

namespace Kaesoft.Hospedaje.Common
{
    public class VentanaBuscadorViewModel : ViewModelBase
    {
        private int _totalRegistros;
        private List<Habitacion> _habitacionesActivas;
        private Habitacion _habitacionSeleccionada;
        private List<CatalogoSummary> _tiposConsulta;
        private CatalogoSummary _tipoConsultaSeleccionado;
        private string _criterio;
        public event EventHandler CerrarVentana;

        public string Criterio
        {
            get { return _criterio; }
            set
            {
                if (_criterio != value)
                {
                    _criterio = value;
                    OnPropertyChanged("Criterio");
                }
            }
        }
        

        public CatalogoSummary TipoConsultaSeleccionado
        {
            get { return _tipoConsultaSeleccionado; }
            set
            {
                if (_tipoConsultaSeleccionado != value)
                {
                    _tipoConsultaSeleccionado = value;
                    OnPropertyChanged("TipoConsultaSeleccionado");
                }
            }
        }
        

        public List<CatalogoSummary> TiposConsulta
        {
            get { return _tiposConsulta; }
            set
            {
                if (_tiposConsulta != value)
                {
                    _tiposConsulta = value;
                    OnPropertyChanged("TiposConsulta");
                }
            }
        }
        
        

        public Habitacion HabitacionSeleccionada
        {
            get { return _habitacionSeleccionada; }
            set
            {
                if (_habitacionSeleccionada != value)
                {
                    _habitacionSeleccionada = value;
                    OnPropertyChanged("HabitacionSeleccionada");
                }
            }
        }
        
        public List<Habitacion> HabitacionesActivas
        {
            get { return _habitacionesActivas; }
            set
            {
                if (_habitacionesActivas != value)
                {
                    _habitacionesActivas = value;
                    OnPropertyChanged("HabitacionesActivas");
                }
            }
        }
        
        
        private RelayCommand _buscarEntidadCommand;

        public VentanaBuscadorViewModel()
        {
            InicializarControles();
        }

        public RelayCommand BuscarEntidadCommand
        {
            get
            {
                return _buscarEntidadCommand ?? (_buscarEntidadCommand = new RelayCommand(BuscarEntidadMethod));
            }
        }

        private void BuscarEntidadMethod(object param)
        {
            int pagina = Convert.ToInt32(param);

            if (pagina == 0)
            {
                OnResetPager("PagerCatalogos");
                TotalRegistros = 0;
            }

            if (!string.IsNullOrEmpty(Criterio) && TipoConsultaSeleccionado.Codigo == 1)
            {
                Procesando = true;
                ProxyDatosReglas.ObtenerHabitacionesPaginadoAsync(TipoConsultaSeleccionado.Codigo, Criterio ?? "", pagina, MetodoResultdo);
            }
            else
            {
                if (TipoConsultaSeleccionado.Codigo == 2)
                {
                    Procesando = true;
                    ProxyDatosReglas.ObtenerHabitacionesPaginadoAsync(TipoConsultaSeleccionado.Codigo, Criterio ?? "", pagina, MetodoResultdo);
                }
                else
                {
                    HabitacionesActivas = null;
                    TotalRegistros = 0;
                }
            }
        }

        private void MetodoResultdo(ObtenerHabitacionesPaginadoCompletedEventArgs e)
        {
            Procesando = false;

            if (e.Error == null)
            {
                HabitacionesActivas = e.Result.Entidades;
                TotalRegistros = e.Result.TotalRegistros;

                if (HabitacionesActivas.Count == 1)
                {
                    HabitacionSeleccionada = HabitacionesActivas.First();
                    SeleccionarCatalogo(null);
                }
            }
        }

        public int TotalRegistros
        {
            get { return _totalRegistros; }
            set
            {
                if (_totalRegistros != value)
                {
                    _totalRegistros = value;
                    OnPropertyChanged("TotalRegistros");
                }
            }
        }

        private void InicializarControles()
        {
            List<CatalogoSummary> lista = new List<CatalogoSummary>();
            lista.Add(new CatalogoSummary() { Codigo = 1, Nombre = "Código" });
            lista.Add(new CatalogoSummary() { Codigo = 2, Nombre = "Nombre" });

            TiposConsulta = lista;
            TipoConsultaSeleccionado = lista.First();
        }

        public void SeleccionarCatalogo(object parametro)
        {
            if (HabitacionSeleccionada == null) return;

            if (CerrarVentana != null)
            {
                CerrarVentana(HabitacionSeleccionada, null);
            }
        }
    }
}
